import java.util.Collections;

/**
 * Created with IntelliJ IDEA.
 * Description:线程安全的集合
 * User: 邓大帅
 * Date: 2024-01-26
 * Time: 16:17
 大部分集合类都不是安全的，Vector、Stack、HashTable是线程安全的，但不建议使用，其他集合类都不是线程安全的
 要实现线程安全的情况下使用线程不安全的集合类有以下方法：
 多线程使用ArrayList
 1.自己手动加锁：例如在进行修改操作时加锁
 2.可以用Collection.synchronizedList(new ArrayList)来包装一下集合类 synchronizedList是一个静态内部类
 3.CopyOnWriteArrayList 支持写时拷贝，线程安全是通过线程修改不同变量来实现的(没加锁) 这个也只能保证数据的最终一致性，不保证实时一致性 适用于修改不频繁的场景
 多线程使用队列
 1.直接用BlockingQueue
 多线程使用HashMap
 1.HashTable是线程安全的，但不推荐使用
 2.ConcurrentHashMap是HashTable的升级版，推荐使用
 二者区别：
 1.加锁粒度不同，HashTable给整个表加锁，任何增删改查操作都会加锁  ConcurrentHashMap给每个链表加锁，修改不同链表时不加锁
 2.更充分的利用了CAS机制 比如更新元素个数的操作，就可以直接用CAS实现，就不必加锁了
 3.优化了扩容策略 当put触发扩容操作时，HashTable会在这一次put操作中将所有元素复制到新表中，这样可能会导致这次put很卡顿
 而ConcurrentHashMap不会一次性完成复制这一操作，会在后续分多次完成，这样每次put完成的时间就不会相差太大了
 */
public class ThreadDemo5 {
}
